/*
 * 文 件 名:  ClearRepeat.java
 * 版    权:   深圳埃思欧纳信息咨询有限公司版权所有. YYYY-YYYY,  All rights reserved
 * 描    述:   <描述>
 * 修 改 人:  honny.huang
 * 修改时间: 2011-4-20
 * 跟踪单号:  <跟踪单号>
 * 修改单号:  <修改单号>
 * 修改内容:  <修改内容>
 */
package com.test;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import com.ue.log.LogManager;
import com.ue.util.StringHelper;

/**
 * <一句话功能简述> <功能详细描述>
 * 
 * @author honny.huang
 * @version [版本号, 2011-4-20]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */

public class ClearRepeat {
	// Java 去掉字符串中的重复数据

	// 有一组字符串比如 北京，北京，上海，上海，上海，武汉-------->要得到 北京，上海，武汉
	// 怎么去掉里面重复的字符串?

	public String DelRepetStr(String str)
	{
		String result = "";
		String[] list = str.split(",");
		for (int i = 0; i < list.length; i++) 
		{
			if (result.indexOf(list[i]) == -1)
			{
				result = result + list[i] + ",";
			}
		}
		return result;
	}
	
	/**
	 * <判断list中是否包含了需要校验的参数，如果没有包含，则新增参数到list，反之，不做操作>
	 * <功能详细描述>
	 * @param list 数据的集合 
	 * @param value 单个需要进行校验的参数
	 * 
	 * @return String [返回类型说明]
	 * @exception throws [违例类型] [违例说明]
	 * @see [类、类#方法、类#成员]
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static List addNoDuplicateParamsToList(List list , Object value)
	{
		if (StringHelper.isNullOrEmpty(list) || StringHelper.isNullOrEmpty(value)) {
			LogManager.debug("传入的参数list或者value为空");
			return list;
		}
		if (!list.contains(value)) 
		{
			list.add(value);
		}
		return list;
	}
	
	/**
	 * <去除list中的重复数据>
	 * <功能详细描述>
	 * @param list 包含有重复数据的集合 
	 * 
	 * @return String [返回类型说明]
	 * @exception throws [违例类型] [违例说明]
	 * @see [类、类#方法、类#成员]
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static List removeDuplicateObjBySet(List list) 
	{
		if (StringHelper.isNullOrEmpty(list)) {
			LogManager.debug("传入的参数list为空");
			return list;
		}
		Set someSet = new HashSet(list);
		Iterator iterator = someSet.iterator();
		List tempList = new ArrayList();
		while (iterator.hasNext()) 
		{
			tempList.add(iterator.next().toString());
		}
		return tempList;
	}
	
	@SuppressWarnings("unchecked")
	private static List removeDuplicateObjByContains(List list)
	{
		ArrayList list2 = new ArrayList();
		Iterator inter = list.iterator();
		while (inter.hasNext()) 
		{
			String value = inter.next().toString();
			if (!list2.contains(value)) 
			{
				list2.add(value);
			}
		}
		return list2;
	}

	/**
	 * @param args
	 */
	@SuppressWarnings("unchecked")
	public static void main(String[] args) 
	{
		// TODO Auto-generated method stub
//		ArrayList tmp = new ArrayList();
//		tmp.add("北京");
//		tmp.add("北京");
//		tmp.add("上海");
//		tmp.add("上海");
//		tmp.add("上海");
//		tmp.add("武汉");
//		tmp.add("111");
//		tmp.add("112");
//		tmp.add("111");
//		tmp.add("111");
//		tmp.add("114");
//		tmp.add("116");
//		tmp.add("113");
		String str = "上海,上海,上海,武汉,武汉,北京,北京";
		ArrayList tmp = new ArrayList();
		String[] list = str.split(",");
		for (String i : list) 
		{
			tmp.add(i);
		}

		/** ********方法三 start*********** */
		 tmp = (ArrayList) removeDuplicateObjBySet(tmp);
//		 tmp = (ArrayList) removeDuplicateObjByContains(tmp);
		 System.out.println(tmp);
		/** ********方法三 end************* */

		/** ********方法四 start*********** */
		// TreeSet本身是带排序功能的，如果现在要对一个对象进行排序，则必须指定对象的排序规则，排序规则通过比较器 ——Comparable完成。
		/** ********方法四 end************* */
	}

	/**
	 * 去掉list中的重复数据
	 * 
	 * @param list
	 */
	private static List removeDuplicateObjBySet2(List list) 
	{
		Set someSet = new HashSet(list);
		// 将Set中的集合，放到一个临时的链表中(tempList)
		Iterator iterator = someSet.iterator();
		List tempList = new ArrayList();
		while (iterator.hasNext()) 
		{
			tempList.add(iterator.next().toString());
		}
//		Collections.sort(tempList);   // 排序
		return tempList;
	}
}
